/**
 * \file URI.cpp
 * \brief URI declaration class
 * \author Edouard ROGE
 * \date 19 septembre 2010
 */

// to disable warnings from windows compilation
#define  _CRT_SECURE_NO_WARNINGS

#include <stdlib.h>
#include <stdio.h>
#include "URI.h"

namespace Core
{
	namespace File
	{
		URI::URI()
		{
		}

		URI::URI(const URI & _URI)
		{
			Set(_URI.GetURI());
		}

		URI::URI(const std::string & _strURI)
		{
			Set(_strURI);
		}

		URI::URI(char * _strURI)
		{
			Set(std::string(_strURI));
		}

		URI::URI(const char * _strURI)
		{
			Set(std::string(_strURI));
		}

		URI::~URI()
		{
		}

		void URI::Set(const std::string & _strURI)
		{
			std::lock_guard<std::mutex> lock(m_mutex);
			std::string strPath(_strURI);
			for (uint32 i = 0; i < strPath.length(); ++i)
			if (strPath[i] == '\\')
				strPath[i] = '/';

			int iDeb = strPath.find_last_of('/');
			int iFin = strPath.find_last_of('.');

			if (iDeb >= 0)
				m_strPath = strPath.substr(0, iDeb + 1);

			if (iFin >= 0)
			{
				m_strFileName = strPath.substr(iDeb + 1, iFin - iDeb - 1);
				m_strFileExtension = strPath.substr(iFin);
			}
			else
			{
				m_strFileName = strPath.substr(iDeb + 1);
			}
		}

		std::string URI::GetURI() const
		{
			return m_strPath + m_strFileName + m_strFileExtension;
		}

		bool URI::FileExists() const
		{
			FILE * pFile = NULL;

			pFile = fopen(GetURI().c_str(), "r");

			if (pFile)
			{
				fclose(pFile);
				return true;
			}
			else
			{
				return false;
			}
		}

		URI & URI::operator=(const std::string & _strURI)
		{
			Set(_strURI);
			return (*this);
		}

		URI & URI::operator=(char * _strURI)
		{
			Set(std::string(_strURI));
			return (*this);
		}

		URI & URI::operator=(const char * _strURI)
		{
			Set(std::string(_strURI));
			return (*this);
		}
	}
}